#include <stdio.h>
#include <string.h>


union u_data
{
    int i;
    double x;
    char s[16];
};

struct s_data
{
    int i;
    double x;
    char s[16];
};


/*
union memory:
   联合中所有成员都是从内存中同一个地址开始的

| | | | | | | | | | | | | | | | | | | | | |
     i 2 3 4 
     x 2 3 4 5 6 7 8
     s 2 3 4 5 6 7 8 9 a b c d e f 1
| | | | | | | | | | | | | | | | | | | | | |


struct memory
   结构对象中每个成员使用内存中的不同位置

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 
   i       x               s                             end
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 


获取联合成员的方式和获取结构成员的方式一样。唯一的差异在于，
当改变一个联合成员的值时，实际上修改了该联合所有成员的值。

 */

void main()
{
    union u_data var, mydata[100];

    printf("sizeof = %ld = %ld\n", sizeof(var), sizeof(mydata)); // 16, 1600
}
